﻿using System;
using System.Data;
using System.Data.SqlClient;
using consultasSql.consultasVarias;
using validarDatos;

public partial class Stdby_Email_asignaEmail : System.Web.UI.Page
{

    private void mostrarMensaje(string mensaje)
    {
        System.Text.StringBuilder sbMensaje = new System.Text.StringBuilder();

        sbMensaje.Append("<script type='text/javascript'>");
        sbMensaje.AppendFormat("alert('{0}');", mensaje);
        sbMensaje.Append("</script>");
        ClientScript.RegisterClientScriptBlock(this.GetType(), "Mensaje", sbMensaje.ToString());
    }


    /*---------------------------------------------------------*/


    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            cargarCampos();
        }
    }


    private void cargarCampos()
    {
        try
        {
            string consulta = "SELECT TOP 1 Usuario, Pass, Smtp, Puerto, Ssl FROM Email";

            SqlCommand command = new SqlCommand();


            command.CommandType = CommandType.Text;
            command.CommandText = consulta;

            command.Parameters.Clear();

            DataTable tabla = new CDarDataSet().darDataTable(command);


            txtUsuario.Text = tabla.Rows[0][0].ToString();


            int cantCar = tabla.Rows[0][1].ToString().Length;

            string cad = null;

            for(int i = 0; i < cantCar ; i++){
                cad = cad + "*";
            }

            txtPass.Text = cad;

            txtSmtp.Text = tabla.Rows[0][2].ToString();
            txtPuerto.Text = tabla.Rows[0][3].ToString();


            if (tabla.Rows[0][4].ToString().Equals("True"))
            {
                cbxSsl.Checked = true;
            }
            else
            {
                cbxSsl.Checked = false;
            }

        }
        catch { }

    }


    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("../Email/asignaEmail.aspx", false);
    }



    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        if (comprobarCampos())
        {
            if (update())
            {
                mostrarMensaje(CMensajes.mensajeOperacionExitosa());
                cargarCampos();
            }
            else
            {
                mostrarMensaje(CMensajes.mensajeOperacionFallida());
            }
        }
    }

    //comprobar campos
    private bool comprobarCampos()
    {
        lblUsuario.Visible = false;
        lblNuevoPass.Visible = false;
        lblSmtp.Visible = false;
        lblPuerto.Visible = false;

        txtUsuario.ToolTip = null;
        txtNuevoPass.ToolTip = null;
        txtSmtp.ToolTip = null;
        txtPuerto.ToolTip = null;

        bool bandera = true;

        try
        {
            if (!CValidaDatos.validaEmail(txtUsuario.Text.Trim()) || String.IsNullOrEmpty(txtUsuario.Text.Trim()))
            {
                txtUsuario.ToolTip = CMensajes.mensajeValidaEmail();
                lblUsuario.Visible = true;
                bandera = false;
            }


            if (!CValidaDatos.validaPass(txtNuevoPass.Text.Trim()))
            {
                txtNuevoPass.ToolTip = "La contraseña no puede contener caracteres especiales.";
                lblNuevoPass.Visible = true;
                bandera = false;
            }


            if (!CValidaDatos.validaPalabras(txtSmtp.Text.Trim()) || String.IsNullOrEmpty(txtSmtp.Text.Trim()))
            {
                txtSmtp.ToolTip = CMensajes.mensajeValidaPalabra();
                lblSmtp.Visible = true;
                bandera = false;
            }

            if (!CValidaDatos.validaEntero(txtPuerto.Text.Trim()) || String.IsNullOrEmpty(txtPuerto.Text.Trim()))
            {
                txtPuerto.ToolTip = "Ingrese un puerto válido.";
                lblPuerto.Visible = true;
                bandera = false;
            }

        }
        catch
        {
            bandera = false;
        }

        return bandera;
    }



    /*UPDATE*/
    public bool update()
    {
        bool bandera = false;


        string pass = null ;

        if (!String.IsNullOrEmpty(txtNuevoPass.Text.Trim()))
        {
            pass = ", Pass = @Pass";
        }

        string consulta = "UPDATE Email SET Usuario = @Usuario, Smtp = @Smtp, Puerto = @Puerto, Ssl = @Ssl" + pass;


        using (SqlConnection objConexion = new SqlConnection(CCadenaConexionSql.cadConexion()))
        {
            using (SqlCommand command = new SqlCommand())
            {
                if (objConexion.State == ConnectionState.Closed)
                { objConexion.Open(); }

                command.CommandType = CommandType.Text;
                command.CommandText = consulta;

                command.Parameters.Clear();

                command.Parameters.AddWithValue("@Usuario", txtUsuario.Text.Trim());


                if (!String.IsNullOrEmpty(txtNuevoPass.Text.Trim()))
                {               
                    string encrip = encriptar(txtNuevoPass.Text.Trim());

                    if (!String.IsNullOrEmpty(encrip))
                    {
                        command.Parameters.AddWithValue("@Pass", encrip);
                    }
                    else
                    {
                        return false;
                    }
                }


                command.Parameters.AddWithValue("@Smtp", txtSmtp.Text.Trim());
                command.Parameters.AddWithValue("@Puerto", txtPuerto.Text.Trim());
                command.Parameters.AddWithValue("@Ssl", Convert.ToBoolean(cbxSsl.Checked));


                command.Connection = objConexion;

                try
                {
                    command.ExecuteNonQuery();
                    bandera = true;
                }
                catch
                {
                    bandera = false;
                }

                if (objConexion.State == ConnectionState.Open)
                { objConexion.Close(); }
            }
        }
        return bandera;
    }


    private string encriptar(string encr)
    {
        string dato = null;
        int num;

        try
        {
            foreach (char car in encr)
            {
                num = Convert.ToInt32(car) - 10;
                dato = dato + Convert.ToChar(num);
            }
        }
        catch
        {
            dato = null;
        }

        return dato;

    }

}